package com.douma.lock;

import redis.clients.jedis.Jedis;
import redis.clients.jedis.params.SetParams;

import java.util.ArrayList;
import java.util.List;

/**
 * 抖码课堂，专注中国程序员基础内功修炼
 * 官网：douma-tech.com
 * 公众号：抖码课堂
 *
 * @作者 : 老汤
 */
public class RedisDistributeLock5 {
    private Jedis jedis;

    public RedisDistributeLock5(Jedis jedis) {
        this.jedis = jedis;
    }

    // SETNX state 1
    public boolean lock(int leaseTime) {
        // 如果 state 已经存在，则返回 0，说明加锁失败
        // 如果 state 不存在，则设置 state，返回 1，说明加锁成功
        //long state = jedis.setnx("state", "1");
        //jedis.expire("state", leaseTime);

        // SET state 1 NX EX 30
        SetParams setParams = new SetParams();
        setParams.nx();
        setParams.ex(leaseTime);
        String state = jedis.set("state", "1", setParams);
        return state != null;
    }

    // 释放锁，删除 state
    public void unlock() {
        jedis.del("state");
    }
}
